package com.binhthuan.catechist.server.domain;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.google.gson.annotations.Expose;

/**
 * @author Giang Đinh - Kế hoạch học tập, tương ứng với bảng
 *         <b>ec_plan</b> trong cơ sở dữ liệu.
 */
@Entity
@Table(name = "ec_plan")
public class Plan extends AbstractObject {

    /**
     * Mã kế hoạch.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    @Expose
    private Integer id;

    /**
     * Tên kế hoạch.
     */
    @Column(name = "name", length = 50)
    @Expose
    private String name;

    /**
     * Chi tiết kế hoạch.
     */
    @OneToMany(mappedBy = "plan", fetch = FetchType.LAZY)
    @Expose
    private Set<PlanDetail> details;

    public Plan() {
        details = new HashSet<PlanDetail>(0);
    }

    /**
     * Lấy mã kế hoạch.
     * @return Mã kế hoạch.
     */
    public Integer getId() {
        return id;
    }

    /**
     * Gán mã kế hoạch.
     * @param id
     *            Mã kế hoạch.
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * Lấy tên kế hoạch.
     * @return Tên kế hoạch.
     */
    public String getName() {
        return name;
    }

    /**
     * Gán tên kế hoạch.
     * @param name
     *            Tên kế hoạch.
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Lấy chi tiết kế hoạch.
     * @return Chi tiết kế hoạch.
     */
    public Set<PlanDetail> getDetails() {
        return details;
    }

    /**
     * Gán chi tiết kế hoạch.
     * @param details
     *            Chi tiết kế hoạch.
     */
    public void setDetails(Set<PlanDetail> details) {
        this.details = details;
    }
}
